package org.sam.beatles.ui.panels;

import java.text.SimpleDateFormat;
import java.util.Collection;

import javax.swing.JButton;
import javax.swing.table.DefaultTableCellRenderer;

import org.jdesktop.swingx.table.DatePickerCellEditor;
import org.sam.beatles.dao.SysProjectDao;
import org.sam.beatles.event.LogEvent;
import org.sam.beatles.event.LogEvent.LogLevel;
import org.sam.beatles.integrations.JSTableJPABuilderImpl;
import org.sam.beatles.pojo.SysProject;
import org.sam.beatles.ui.JPanelSingleDataWindow;
import org.sam.beatles.utils.BeanUtil;
import org.sam.swing.JSToolBar;
import org.sam.swing.table.JSTable;
import org.sam.swing.table.JSTableBuilder;
import org.sam.swing.table.JSTableColumn;
import org.sam.swing.table.editor.JSTableDateSpinnerEditor;
import org.sam.swing.table.renderer.JSTableFormatRenderer;
import org.sam.swing.table.renderer.JSTableRowNumberRenderer;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 项目设置
 * 
 * @author sam
 *
 */
public class JPanelSysProject extends JPanelSingleDataWindow<SysProject> {

	private static final long serialVersionUID = 3616525326101469219L;

	/**
	 * 项目dao
	 */
	@Autowired
	private SysProjectDao dao;

	/**
	 * spring助手
	 */
	@Autowired
	private BeanUtil beanUtil;

	/**
	 * {@inheritDoc} 这里是构建表格的方法，仅仅需要复写这么一个方法就可以了
	 * renderer,editor在org.sam.table.renderer,editor2个包里，具体用哪个自己研究一下
	 */
	@Override
	protected JSTable buildTable() {
		DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
		renderer.setHorizontalAlignment(DefaultTableCellRenderer.LEFT);

		JSTableColumn c0 = new JSTableColumn();
		c0.setHeaderValue("#");
		c0.setTitle("#");
		c0.setIdentifier("id");
		c0.setCellRenderer(new JSTableRowNumberRenderer());
		c0.setEditable(false);
		c0.setWidth(20);
		c0.setModelIndex(0);

		JSTableColumn c1 = new JSTableColumn();
		c1.setHeaderValue("名称");
		c1.setTitle("名称");
		c1.setIdentifier("name");
		c1.setCellRenderer(renderer);
		c1.setDefaultValue("");
		c1.setMinWidth(125);

		JSTableColumn c2 = new JSTableColumn();
		c2.setHeaderValue("版本号");
		c2.setTitle("版本号");
		c2.setIdentifier("version");
		c2.setCellRenderer(renderer);
		c2.setDefaultValue("");

		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

		JSTableColumn c3 = new JSTableColumn();
		c3.setHeaderValue("开始时间");
		c3.setTitle("开始时间");
		c3.setIdentifier("date");
		c3.setCellRenderer(renderer);
		c3.setCellEditor(new JSTableDateSpinnerEditor());
		c3.setDefaultValue(null);
		c3.setMinWidth(125);

		JSTableColumn c4 = new JSTableColumn();
		c4.setHeaderValue("开始时间2");
		c4.setTitle("开始时间2");
		c4.setIdentifier("date");
		c4.setCellRenderer(new JSTableFormatRenderer(dateFormat, "0000-00-00"));
		c4.setCellEditor(new DatePickerCellEditor(dateFormat));
		c4.setDefaultValue(null);
		c4.setMinWidth(125);

		try {
			// 这里使用默认jpa的实现，这里可以复写adapter实现一些扩展功能
			JSTableBuilder<Collection<SysProject>> builder = new JSTableJPABuilderImpl<>(SysProject.class, dao, c0, c1,
					c2, c3, c4);
			this.tableModel = builder.buildTableModel();
			this.tableColModel = builder.buildTableColumnModel();
			this.table = builder.buildTable();

		} catch (Exception ex) {
			ex.printStackTrace();
		}

		return this.table;
	}

	/**
	 * 以下方法如果不需要修改，使用系统默认的方法和样式，则不需要重写
	 */

	/**
	 * {@inheritDoc} 这里可以复写生产工具栏的方法
	 */
	@Override
	protected JSToolBar buildToolBar() {
		JSToolBar buildToolBar = super.buildToolBar();
		JButton btn = buildToolBar.buildButton("webtree.png", "日志测试", "测试发送一个日志输出消息", e -> {
			beanUtil.publishEvent(new LogEvent(this, "系统错误", LogLevel.Error, "这里是错误内容！！！！"));
		});
		buildToolBar.add(btn);
		return buildToolBar;
	}

	/**
	 * {@inheritDoc} 可以自己复写实现，生成检索工具条的方法
	 */
	@Override
	protected void buildSearch(JSToolBar toolBar) {
		super.buildSearch(toolBar);
	}

	/**
	 * {@inheritDoc} 这个是异步执行的操作，一般可以加载数据等 可以自己复写
	 */
	@Override
	protected void asyncAfterBuilder() {
		super.asyncAfterBuilder();
	}

	/**
	 * {@inheritDoc} 这个是生成底部工具栏的方法，默认不生成，可以重写
	 */
	@Override
	protected JSToolBar buildFoorterBar() {
		return super.buildFoorterBar();
	}

}
